package com.idis.dbApp.mapper;

import com.idis.entity.Contact;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.type.JdbcType;

import java.util.List;

/**
 * Created by Ming on 2018/1/28.
 */

/**
 * 联系方式数据操作
 */
public interface ContactMapper {

    /**
     * 获取联系方式
     * @return 联系方式集
     */
    @Select({
            "select",
            "*",
            "from contact",
    })
    @Results({
            @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true),
            @Result(column="contact_1", property="contact1", jdbcType=JdbcType.VARCHAR),
            @Result(column="contact_2", property="contact2", jdbcType=JdbcType.VARCHAR),
            @Result(column="contact_3", property="contact3", jdbcType=JdbcType.VARCHAR),
            @Result(column="picture", property="picture", jdbcType=JdbcType.VARCHAR)
    })
    List<Contact> findAll();

    /**
     * 根据ID删除联系方式
     * @param id 联系方式的ID
     * @return 删除成功的数量
     */
    @Delete({
        "delete from contact",
        "where id = #{id,jdbcType=INTEGER}"
    })
    int deleteByPrimaryKey(Integer id);

    /**
     * 插入新的联系方式
     * @param record 联系方式
     * @return 插入成功的数量
     */
    @Insert({
        "insert into contact (id, contact_1, ",
        "contact_2, contact_3, ",
        "picture)",
        "values (#{id,jdbcType=INTEGER}, #{contact1,jdbcType=VARCHAR}, ",
        "#{contact2,jdbcType=VARCHAR}, #{contact3,jdbcType=VARCHAR}, ",
        "#{picture,jdbcType=VARCHAR})"
    })
    int insert(Contact record);

    /**
     * 插入新联系方式，仅插入非空信息
     * @param record 联系方式
     * @return 成功插入的数量
     */
    @InsertProvider(type=ContactSqlProvider.class, method="insertSelective")
    int insertSelective(Contact record);

    /**
     * 根据ID搜索联系信息
     * @param id 联系方式ID
     * @return 联系方式集
     */
    @Select({
        "select",
        "id, contact_1, contact_2, contact_3, picture",
        "from contact",
        "where id = #{id,jdbcType=INTEGER}"
    })
    @Results({
        @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true),
        @Result(column="contact_1", property="contact1", jdbcType=JdbcType.VARCHAR),
        @Result(column="contact_2", property="contact2", jdbcType=JdbcType.VARCHAR),
        @Result(column="contact_3", property="contact3", jdbcType=JdbcType.VARCHAR),
        @Result(column="picture", property="picture", jdbcType=JdbcType.VARCHAR)
    })
    Contact selectByPrimaryKey(Integer id);

    /**
     * 更新联系方式，仅更新非空属性，ID必须
     * @param record 联系方式
     * @return 成功更新的数量
     */
    @UpdateProvider(type=ContactSqlProvider.class, method="updateByPrimaryKeySelective")
    int updateByPrimaryKeySelective(Contact record);

    /**
     * 更新联系方式，ID必须
     * @param record 联系方式
     * @return 成功更新的数量
     */
    @Update({
        "update contact",
        "set contact_1 = #{contact1,jdbcType=VARCHAR},",
          "contact_2 = #{contact2,jdbcType=VARCHAR},",
          "contact_3 = #{contact3,jdbcType=VARCHAR},",
          "picture = #{picture,jdbcType=VARCHAR}",
        "where id = #{id,jdbcType=INTEGER}"
    })
    int updateByPrimaryKey(Contact record);
}